package com.jzqf.android.alive


import android.content.Context
import android.os.Handler
import android.os.Looper
import android.os.Process
import android.util.Log
import java.io.PrintWriter
import java.io.StringWriter
import java.io.Writer
import kotlin.system.exitProcess


/**
 * 2019/12/24 11:48
 * 异常上报
 *
 * @author LiuWeiHao
 */
object CrashHandler {
    /**
     * 初始化
     *
     * @param context 上下文
     * @param key     配置KEY
     * @param isDebug 是否debug模式
     */
    fun init(context: Context?, key: String?, isDebug: Boolean) {
        initCrash()
    }


    private fun initCrash() {
        // 获取系统默认的UncaughtException处理器
        val exceptionHandler = Thread.getDefaultUncaughtExceptionHandler()
        // 设置该CrashHandler为程序的默认处理器
        Thread.setDefaultUncaughtExceptionHandler { thread, throwable -> //自定义处理异常
            try {
                Log.e("捕捉异常", "应用重启", throwable)
                Handler(Looper.myLooper()!!).postDelayed({
                    if (exceptionHandler != null) {
                        exceptionHandler.uncaughtException(thread, throwable)
                    } else {
                        Process.killProcess(Process.myPid())
                        exitProcess(1)
                    }
                }, 3000)
            } catch (ex: InterruptedException) {
                ex.printStackTrace()
            }
        }
    }


    private fun getExceptionMsg(throwable: Throwable): String {
        val exception: String
        // 使用默认初始字符串缓冲区大小创建一个新字符串 writer。
        val info: Writer = StringWriter()
        // 创建不带自动行刷新的新 PrintWriter
        val printWriter = PrintWriter(info)
        // 将此 throwable 及其追踪输出到指定的 PrintWriter
        throwable.printStackTrace(printWriter)
        exception = info.toString()
        printWriter.close()
        return exception
    }
}